﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using Entity;

namespace Data
{
    public class StatutData
    {

        /* Note :
         * Méthode implémentée mais non demandée à la base.
         * Ne devrais pas être nécessaire.
         * Laissée ici au cas où.*/
        /// <summary>
        /// Récupère les informations d'un statut.
        /// </summary>
        /// <param name="idstatut">L'identifiant du statut</param>
        /// <returns>Le statut, ou null s'il n'existe pas</returns>
        public static Statut getStatut(int idstatut)
        {
            ModeleDataContext mdl = DataContext.Context;

            var sql = from s in mdl.Statut
                      where s.idstatut == idstatut
                      select s;

            List<Statut> statuts = sql.ToList();
            if (statuts.Count > 0)
                return statuts[0];
            else
                return null;
        }

        /// <summary>
        /// Ajoute un statut pour un utilisateur.
        /// </summary>
        /// <param name="idutilisateur">L'utilisateur</param>
        /// <param name="texte">Le texte du statut</param>
        /// <param name="date">La date du statut</param>
        public static void ajouterStatut(int idutilisateur, String texte, DateTime date)
        {
            ModeleDataContext mdl = DataContext.Context;

            Statut statut = new Statut();
            statut.idutilisateur = idutilisateur;
            statut.date = date;
            statut.texte = texte;

            mdl.Statut.InsertOnSubmit(statut);
            mdl.SubmitChanges();
        }

        /// <summary>
        /// Supprime le statut d'un utilisateur.
        /// </summary>
        /// <param name="idstatut">L'identifiant du statut</param>
        public static void supprimerStatut(int idstatut)
        {
            ModeleDataContext mdl = DataContext.Context;

            // On supprime enfin le statut lui même
            Statut statut = getStatut(idstatut);

            if (statut != null)
            {
                mdl.Statut.DeleteOnSubmit(statut);
                mdl.SubmitChanges();
            }
        }

        /// <summary>
        /// Retourne la liste des statuts d'un utilisateur.
        /// </summary>
        /// <param name="idutilisateur">L'utilisateur</param>
        /// <returns>La liste des actualités d'un utilisateur</returns>
        public static List<StatutUtilisateur> getStatuts(int idutilisateur)
        {
            ModeleDataContext mdl = DataContext.Context;

            var sql = from s in mdl.Statut
                      where s.idutilisateur == idutilisateur
                      orderby s.date descending
                      select new StatutUtilisateur(s, s.Utilisateur);

            List<StatutUtilisateur> statuts = sql.ToList();

            if (statuts.Count > 0)
                return statuts;
            else
                return null;
        }
    }
}
